Telegram Group & Telegram Channel
🧠 Что выведет следующий код?


package main

import (
"fmt"
)

func change(val *int) {
defer fmt.Println("defer:", *val)
*val = 20
fmt.Println("changed:", *val)
}

func main() {
num := 10
change(&num)
fmt.Println("main:", num)
}


Варианты ответа:
A)

defer: 20
main: 20


B)

defer: 10
main: 20


C)

changed: 20
main: 20


D)

defer: 20
main: 20


Код выведет:
changed: 20
defer: 10
main: 20


Объяснение:
main: Переменная num инициализируется значением 10.
change(&num): Вызывается функция change, и ей передается адрес переменной num (указатель на num). Теперь параметр val внутри change указывает на ту же ячейку памяти, где хранится num.
defer fmt.Println("defer:", *val): Внутри change встречается оператор defer.
Важно: Аргументы для отложенного вызова (*val в данном случае) вычисляются сразу в момент объявления defer, а не в момент выполнения отложенной функции. На этом этапе *val (значение по адресу, на который указывает val, то есть значение num) равно 10. Таким образом, вызов fmt.Println("defer:", 10) ставится в очередь на выполнение перед выходом из функции change.
*val = 20: Значение по адресу, на который указывает val, изменяется на 20. Поскольку val указывает на num, это напрямую изменяет значение переменной num в функции main на 20.
fmt.Println("changed:", *val): Выводится текущее значение по адресу val, которое теперь равно 20. Печатается changed: 20.
Конец change: Функция change собирается завершиться. Перед выходом выполняется отложенный вызов.
Выполнение defer: Выполняется ранее запланированный вызов fmt.Println("defer:", 10). Печатается defer: 10.
Возврат в main: Управление возвращается в main.
fmt.Println("main:", num): Выводится текущее значение переменной num. Так как функция change изменила его через указатель, num теперь равно 20. Печатается main: 20.

@golangtests



tg-me.com/golangtests/762
Create:
Last Update:

🧠 Что выведет следующий код?


package main

import (
"fmt"
)

func change(val *int) {
defer fmt.Println("defer:", *val)
*val = 20
fmt.Println("changed:", *val)
}

func main() {
num := 10
change(&num)
fmt.Println("main:", num)
}


Варианты ответа:
A)

defer: 20
main: 20


B)

defer: 10
main: 20


C)

changed: 20
main: 20


D)

defer: 20
main: 20


Код выведет:
changed: 20
defer: 10
main: 20


Объяснение:
main: Переменная num инициализируется значением 10.
change(&num): Вызывается функция change, и ей передается адрес переменной num (указатель на num). Теперь параметр val внутри change указывает на ту же ячейку памяти, где хранится num.
defer fmt.Println("defer:", *val): Внутри change встречается оператор defer.
Важно: Аргументы для отложенного вызова (*val в данном случае) вычисляются сразу в момент объявления defer, а не в момент выполнения отложенной функции. На этом этапе *val (значение по адресу, на который указывает val, то есть значение num) равно 10. Таким образом, вызов fmt.Println("defer:", 10) ставится в очередь на выполнение перед выходом из функции change.
*val = 20: Значение по адресу, на который указывает val, изменяется на 20. Поскольку val указывает на num, это напрямую изменяет значение переменной num в функции main на 20.
fmt.Println("changed:", *val): Выводится текущее значение по адресу val, которое теперь равно 20. Печатается changed: 20.
Конец change: Функция change собирается завершиться. Перед выходом выполняется отложенный вызов.
Выполнение defer: Выполняется ранее запланированный вызов fmt.Println("defer:", 10). Печатается defer: 10.
Возврат в main: Управление возвращается в main.
fmt.Println("main:", num): Выводится текущее значение переменной num. Так как функция change изменила его через указатель, num теперь равно 20. Печатается main: 20.

@golangtests

BY Go tests


Warning: Undefined variable $i in /var/www/tg-me/post.php on line 283

Share with your friend now:
tg-me.com/golangtests/762

View MORE
Open in Telegram


Go tests Telegram | DID YOU KNOW?

Date: |

Telegram Gives Up On Crypto Blockchain Project

Durov said on his Telegram channel today that the two and a half year blockchain and crypto project has been put to sleep. Ironically, after leaving Russia because the government wanted his encryption keys to his social media firm, Durov’s cryptocurrency idea lost steam because of a U.S. court. “The technology we created allowed for an open, free, decentralized exchange of value and ideas. TON had the potential to revolutionize how people store and transfer funds and information,” he wrote on his channel. “Unfortunately, a U.S. court stopped TON from happening.”

Go tests from cn


Telegram Go tests
FROM USA